3.6.9.2 dmfma-倍精度行列ベクトル積和演算の基本動作
あらかじめ行列レジスタに書かれた行列データをAとして4次元の倍精度行列ベクトル積FMA (Ax+y)を行う。
行列レジスタから読み出した 4 行 4 列のブロックフロート倍精度行列データのうち、後述する指定に応じて0,1行目あるいは2,3行目を抽出した 2 行 4 列の行列が使用される。
code:文法
dmfma(u|d) $l(x|y) <src_x> <src_y> <dst_0> <dst_1>..
(u|d)は 4 行 4 列のうち上半分・下半分どちらの 2 行 4 列を演算に使用するかを指定するために用いられる。
uを指定した場合はAの0,1行目をxと掛け合わせたものをAxの0,1要素目とし、Axの2,3要素目を 0 としてyとの加算を行う(以下効果においてoffset=0)。
dを指定した場合はAの2,3行目をxと掛け合わせたものをAxの2,3要素目とし、Axの0,1要素目を 0 としてyとの加算を行う(以下効果においてoffset=2)。
第 1 入力の$l(x|y)は読み出し元の行列レジスタであり、以下効果においてsideとして参照する。
第 2 入力の<src_x>および第 3 入力の<src_y>は読み出し元PEオペランドである。
<src_x>はブロックフロート倍精度の値でアクセス語長は長語である。
基本動作において<src_y>は通常の倍精度の値で、アクセス語長は長語である。
<dst_0> [<dst_1>..]は書き込み先PEオペランドである。
演算結果は複数のPEメモリに同時に書き込むことができるが、以下効果では簡単のため単一の書き込み先としてdstを指定した例を示している。
基本動作において演算結果は通常の倍精度であり、書き込みのアクセス語長は長語である。
code:効果.py
for cycle = 0:4
forall chip,l2b,l1b,mab
LongWord src_data_A44 = MEMchipl2bl1bmab.refer_matreg(side, LongWord)
LongWord src_data_x4 = MEMchipl2bl1bmab0:4.refer_pemem(src_x,cycle)
LongWord src_data_y4 = MEMchipl2bl1bmab0:4.refer_pemem(src_y,cycle)
LongWord dst_data4 = {0, 0, 0, 0}
for i = 0:2
for j = 0:4
dst_datai + offset += src_data_Ai + offsetj * src_data_xj
for i = 0:4
dst_datai += src_data_yi
MEMchipl2bl1bmab0:4.refer_pemem(dst, cycle) = dst_data0:4